Py.Cafe

apollonomade/

AE MeetUp - Streamlit

Podcast Episode Statistics

DocsPricing
  • DataCirclePodcast.csv
  • app.py
  • requirements.txt
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import streamlit as st
import pandas as pd
import altair as alt


# Carregar o dataset
try:
    df = pd.read_csv("DataCirclePodcast.csv", sep=',')
except FileNotFoundError:
    st.error("The file 'DataCirclePodcast.csv' was not found. Please upload the correct file.")
    st.stop()

# Título do app
st.title("AE MeetUp - Building an App with Streamlit")

# Mensagem inicial
st.markdown(
    """
Hello, MAE! Let's start this adventure?
"""
)

# Mostrar o DataFrame
st.header("Reading the Dataset")
st.dataframe(df)

# Verificar se as colunas necessárias existem no DataFrame
if "Título do episódio" in df.columns and "Reproduções" in df.columns:
    # Adicionar filtro de lista suspensa
    st.subheader("Filter by Episode Title")
    selected_episode = st.selectbox(
        "Select an episode to filter:",
        options=["All"] + df["Título do episódio"].drop_duplicates().tolist()
    )
    
    # Filtrar o DataFrame com base na seleção
    if selected_episode != "All":
        filtered_df = df[df["Título do episódio"] == selected_episode]
    else:
        filtered_df = df
    
    # Criar o gráfico de barras com Altair
    if not filtered_df.empty:
        chart = (
            alt.Chart(filtered_df)
            .mark_bar()
            .encode(
                y=alt.X("Título do episódio", title="Episode Title", sort='-x'),  # Ordenação decrescente
                x=alt.Y("Reproduções:Q", title="Reproductions"),  # Quantidade de reproduções no eixo X
                tooltip=["Título do episódio", "Reproduções"]  # Exibição do tooltip com o título do episódio e as reproduções
            )
            .mark_bar()
            .encode(
                text="Reproduções:Q"  # Adiciona o rótulo com a quantidade de reproduções em cada barra
            )
            .properties(
                width=800,  # Largura do gráfico
                height=400,  # Altura do gráfico
                title="Reproductions per Episode"
            )
        )

        chart.configure_text(
            align='center',
            baseline='middle',
            fontSize=12,
            dx=0,  # Ajuste horizontal do texto
            dy=-10  # Ajuste vertical do texto para ficar acima da barra
        )

        # Exibir o gráfico
        st.altair_chart(chart, use_container_width=True)
    else:
        st.warning("No data to display for the selected episode.")
else:
    st.error("The dataset must have columns named 'Título do episódio' and 'Reproduções'.")

media_curtidas = df[["Estúdio","Curtidas"]].dropna().groupby("Estúdio").mean()

st.write("Média de Curtidas por:")
col1, col2, col3, col4 = st.columns(4)
with col1:
    st.metric(label="Qtde Gravada em Estúdio", value= df.loc[df["Estúdio"] == "Sim"].shape[0])
with col2:
    st.metric(label="Média de Curtidas Estúdio", value= media_curtidas.at["Sim","Curtidas"])
with col3:
    st.metric(label="Qde Gravada fora de Estúdio", value= df.loc[df["Estúdio"] == "Não"].shape[0])
with col4:
    st.metric(label="Médias de Curtidas Fora de Estúdio", value= media_curtidas.at["Não","Curtidas"])

st.title("Ter convidados externos, afeta a quantidade de curtidas?")

# Gráfico de linha segmentado por 'convidado'
chart = (
    alt.Chart(df)
    .mark_line()  # Tipo do gráfico: linha
    .encode(
        x='Hora de publicação (UTC):T',  # Eixo X: Dia (tipo temporal)
        y='Curtidas:Q',  # Eixo Y: Curtidas (quantitativo)
        color='Convidado Externo?:N',  # Segmentação por 'convidado' (Sim ou Não)
        tooltip=['dia:T', 'Curtidas:Q', 'Convidado Externo?:N']  # Exibindo os valores no tooltip
    )
    .properties(
        title='Evolução das Curtidas por Convidado Externo',
        width=600,
        height=400
    )
)

# Exibindo o gráfico no Streamlit
st.altair_chart(chart)

# Final Message
st.title("Now it's your time!")

# Final Message2
st.markdown(
    """
Use your creativity, the streamlit library, and your BFF, Chat GPT, to help you develop an amazing app!
"""
)